---
title: "Quickstart Guide"
description: "This 5 minutes checklist helps you get all the requirements to start adding integrations to your product. "
icon: "star"
---

## **Prerequisites**

Before you begin, make sure you have the following:

- **An account on [our cloud](https://app.panora.dev) (⏱️ 15sec)** or **Panora Running on your machine** (⏱️ 1 min self-hosting guide [here](/open-source/self_hosting/guide))
- **An API key** (⏱️ 1 min guide guide [here](/core-concepts/auth#learn-how-to-generate-your-api-keys))
- **A free Hubspot account** (signup [here](https://app.hubspot.com/signup-hubspot/crm) - use a [disposable email](https://temp-mail.org/en/) if you prefer)

## **Step 1: Getting access to your users data**

There are two ways for a user to grant you access to their data: 
- [**No-code: Magic Links**](/core-concepts/magic-links)  
- [**Natively embedding into frontend**](/recipes/embed-catalog).

Magic Links help you invite your users to grant you access to their data without a dedicated website. 
Let's now create our first magic link!


    <Steps>
      <Step>Login to your [account dashboard](https://app.panora.dev)</Step>
      <Step>
        Go to _Connections_ [section](https://app.panora.dev/connections) and click button `Create a Magic Link`
      </Step>
      <Step>Click `Create a Unique Magic Link`</Step>
      <Step>
        You'll be asked for two informations: an `Origin User Email` (of the user
        you're creating the link for) and an `Origin User Identifier`. The `Origin
        User Identifier` is the id of the user you're inviting, as represented in your
        software. If you already have created a [Linked User](/recipes/import-existing-users) you have the option to select
        it.
      </Step>
      <Step>Click `Generate`</Step>

      <Step>Now, for the purpose of this tutorial, open the magic link you just created and login using the Hubspot account you previously created</Step>
    </Steps>

## Step 2: Grab the connection token

Connection tokens are the way Panora represents a third party's account, whatever the underlying identification mechanism is.
There are two ways to get these tokens: [catching them with a webhook](/recipes/catch-connection-token), or just finding them in your dashboard. For now, we'll stick to the dashboard.

To find the `connection token` in the dashboard, visit the `connections` section. Copy the connection token from its column and save it.
![title](/images/connections_screen.png)

## **Step 3: Make your first  API requests**

Let's list the contacts that are in the Hubspot acccount, using Panora's API.

This will require you to have: 
- The `connection token` from the previous step
- An API key (guide [here](/core-concepts/auth#learn-how-to-generate-your-api-keys))
- You don't need to create contacts, since Hubspot accounts come with mockup contacts included.

The API key identifies _YOU_ as a user of Panora, while the connection token identifies which user's account you behalf you want to. In the future, you will have one connection token per user account connected on the Panora platform, while keeping one API key.

You can copy past the Curl example below, and copy-paste it in your terminal. Don't forget to replace the API key and the connection token.
<Note>
  ONLY SELFHOST:
  Replace `https://api.panora.dev` with `http://localhost:3000`.
  If you use the SDK, include `serverURL: 'http://localhost:3000'` in the Panora client
  ```javascript
  const panora = new Panora({
    serverURL: 'http://localhost:3000',
    apiKey: process.env.API_KEY,
  });
  ```
</Note>
      <CodeGroup>
         ```shell curl
        curl --location 'https://api.panora.dev/crm/contacts' \
--header 'x-connection-token: 7e6b9454-f616-477a-a71a-0f23eb74a72c' \
--header 'x-api-key: sk_dev_30a78556-6a83-425x-b461-a87f007a09e1'
        ```

        ```javascript TypeScript SDK (alpha)
        import { Panora } from "@panora/sdk";

        const panora = new Panora({
          apiKey: process.env.API_KEY,
        });

        const result = await panora.crm.contacts.list({
          xConnectionToken: "YOUR_USER_CONNECTION_TOKEN"
        });

         for await (const page of result) {
          // handle page
        }
        ```

        ```python Python SDK (alpha)
        import os
        from panora_sdk import Panora

        panora = Panora(
          api_key=os.getenv("API_KEY", ""),
        )

        res = panora.crm.contacts.list(x_connection_token="YOUR_USER_CONNECTION_TOKEN")

        if res is not None:
    while True:
        # handle items

        res = res.Next()
        if res is None:
            break
        ```
      </CodeGroup>

Let’s break down what we did in this tutorial:


- We created a Magic Link to let a user grant us access to its account
- After he connected its account, Panora synced data with Hubspot
- We used a `connection token` and our Panora API key to make our first request to the Panora API

## Suggested Next Steps

Amazing! You’ve successfully sent your first unified API request with Panora! Here are some next steps to continue your learning journey:

- Setup your first [webhooks](/webhooks/overview)

API resources:
Check our [API documentation](/api-reference/introduction) for more details on the available endpoints and parameters.

Check our SDKs: [Typescript](/backend-sdk/typescript) for a set of tools to make it easier for you to build with and integrate Panora into your applications.
